# -*- coding: UTF-8 -*-

"""
@author: 肥仔编程
@file:05.py
@time:2021-04-21
"""

"""
    字符串的使用
        1. 熟悉字符串的声明
        2. 掌握字符串中常用的方法
        3. 熟悉字符串格式化处理
"""

"""
    字符串的声明
        可以使用单引号、双引号、三引号
        区别是三引号可以进行文字的换行，而单/双引号却只能一行
        单/双引号单独使用时没有太大区别，不同之处在于，它们可以配合使用
"""
a = '单引号定义字符串'
b = "双引号定义字符串"
c = """
      可以换行的字符串
      我可以换行显示
    """
d = "字符串中包含引号 '我也有引号'"

"""
    切片的使用
        语法：变量[起始位置:结束位置:步长]
        注意：
            结束位置不包含对应位置的下标
            步长：选取间隔，正负数都可以，默认是1
            起始位置省略，默认将从0开始，结束位置省略，将一直到最后
            方括号中的参数可以是正数，也可以是负数，正数表示从左向右截取想要的内容，负数表示从右向左输出想要的内容
"""
test_str = "我爱编程，编程使我快乐！"
# 输出下标为 2 的位置对应的字符串
print(test_str[2])
# 输出从下标为1 的位置开始，到下标为3中间的内容，输出跨度为1
print(test_str[1:4])
# 输出从下标为1 的位置开始，到下标为3中间的内容，输出跨度为2
print(test_str[1:4:2])
# 输出从开始到下标为3中间的内容，即省略起始位置
# 默认起始位置为0,跨度为1
print(test_str[:4])
# 输出从开始到下标为3中间的内容，即省略起始位置,输出跨度为2
print(test_str[:4:2])
# 输出从开始位置到倒数第二位中间的内容
print(test_str[:-2])
# 输出从右开始下标为5 到下标为 1之间的内容
print(test_str[-5:-1])
print("hahah", test_str[-5:-1:-1])
# 步长使用负数，表示从右向左
print(test_str[::-1], test_str[::-2], test_str[::-3], sep=" > ")

"""
    字符串中常用的方法
        find() 
            作用：查询指定字符串是否包含在字符串中，找到返回对应的下标，否则返回 -1
            语法： 字符串.find(子串, 开始位置，结束位置)，开始/结束的下标都可以省略     
            注意： 使用此方法仅仅会查找到指定内容第一次出现的位置，之后都不会再查找 
            补充： find() 方法从左向右进行查找 rfind() 从右向左开始查找
        index()
            作用：查询指定字符串是否包含在字符串中，找到返回对应的下标，否则报错
            语法： 字符串.index(子串, 开始位置，结束位置)，开始/结束的下标都可以省略    
            补充： index() 方法从左向右进行查找 rindex() 从右向左开始查找 
        count()
            作用： 查询指定字符串在字符串中出现的次数
            语法： 字符串.count(子串, 开始位置，结束位置)，开始/结束的下标都可以省略
            返回值：找到就返回次数，默认返回0    
        replace()
            作用： 替换字符串
            语法： 字符串.replace(旧字符串, 老字符串, 替换次数)
            注意： 替换次数如果大于要替换内容出现的总次数就全部替换，如果没有指定替换次数，默认全部替换
        split()
            作用： 分割字符串
            语法： 字符串.split(分割符, 分割次数)
        join()
            作用： 将字符串和指定内容拼接
            语法： 字符串.join(字符串1， 字符串2， ……)
        startswith()
            作用： 以指定字符串开头
            语法： 字符串.startswith(字符串, 开始下标, 结束下标)
            返回值： 以指定内容开头返回 True，否则返回 False
        endswith()
            作用： 以指定字符串结尾
            语法： 字符串.startswith(字符串, 开始下标, 结束下标)
            返回值： 以指定内容开头返回 True，否则返回 False  
"""

"""
    格式化字符串
        %s 字符串占位符
        %d 整数的占位符
        %nd 显示几位占位符，如果不够前边用空格补齐
        %f 浮点数的占位符
        %.nf 浮点数占位符，n表示小数点后几位，只是保留相应的位数，不进行四舍五入
"""
# 使用占位符的方式格式化输出
# 字符串 % (内容列表)
print("大家好，我是%s, 今年%d岁， 闭关%d年， 自创太极拳，准备下山看看，可惜口袋只有%.2f钱银子，不够花啊" % ('张三丰', 102, 10, 32.125))
# 使用 format 函数自动按照位置填充内容
str_1 = "大家好，我是{}, 今年{}岁， 闭关{}年， 自创太极拳".format('张三丰', 102, 10,)
print(str_1)
# 自定义位置，按照位置自动填充
str_1 = "大家好，我是{0}, 今年{1}岁， 闭关{2}年， 自创太极拳".format('张三丰', 102, 10,)
print(str_1)
# 指定变量名，，按照参数名填充
str_1 = "大家好，我是{name}, 今年{age}岁， 闭关{year}年， 自创太极拳".format(name = '张三丰', age = 102, year = 10,)
print(str_1)
# 自定义位置和参数名混合使用
# 注意参数名需要放在后边
str_1 = "大家好，我是{name}, 今年{0}岁， 闭关{1}年， 自创太极拳".format(102, 10, name = '张三丰')
print(str_1)
